/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sacodemel.financeiro.mb;

import com.sacodemel.financeiro.servico.IDespesasService;
import com.sacodemel.financeiro.servico.impl.DespesasService;
import com.sacodemel.financeiro.modelo.RegistroCaixa;
import com.sacodemel.financeiro.modelo.dto.TotalDTO;
import com.sacodemel.financeiro.util.JSFUtil;
import java.io.Serializable;

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author X4Q1
 */
@ManagedBean
@RequestScoped
public class DespesasMB implements Serializable {

    private DataModel listaDespesas = null;
    private IDespesasService despesasService = new DespesasService();
    private RegistroCaixa registroCaixa = new RegistroCaixa();
    private TotalDTO total;

    /**
     * @return the listaDespesas
     */
    public DataModel getListaDespesas() {

        if (listaDespesas == null) {
            this.carregaListagem();
        }

        return listaDespesas;
    }

    public String retornaFormulario() {
        return "despesasForm";
    }

    public String preparaAlteracao() {
        this.carregaRegistroSelecionado();

        return this.retornaFormulario();
    }

    public String salvar() {

        try {

            despesasService.salvar(registroCaixa);

            this.finalizaOperacao();
            return voltar();
        } catch (Exception ex) {
            JSFUtil.adicionaMensagemFalha();
        }

        return null;

    }

    public String excluir() {
        try {
            this.carregaRegistroSelecionado();
            despesasService.excluir(registroCaixa);
            this.finalizaOperacao();
            return voltar();
        } catch (Exception ex) {
            JSFUtil.adicionaMensagemFalha();
        }

        return null;

    }

    public String voltar() {
        return "despesas";
    }

    /**
     * @param listaDespesas the listaDespesas to set
     */
    public void setListaDespesas(DataModel listaDespesas) {
        this.listaDespesas = listaDespesas;
    }

    /**
     * @return the ivestidoresService
     */
    public IDespesasService getDespesasService() {
        return despesasService;
    }

    /**
     * @param ivestidoresService the ivestidoresService to set
     */
    public void setDespesasService(IDespesasService despesasService) {
        this.despesasService = despesasService;
    }

    /**
     * @return the registroCaixa
     */
    public RegistroCaixa getRegistroCaixa() {
        return registroCaixa;
    }

    /**
     * @param registroCaixa the registroCaixa to set
     */
    public void setRegistroCaixa(RegistroCaixa registroCaixa) {
        this.registroCaixa = registroCaixa;
    }
    
    private void carregaListagem() {
        try{
            List<RegistroCaixa> lista = despesasService.obterListaDespesas();
            listaDespesas= new ListDataModel(lista);
            total = despesasService.retornarTotal(lista);
        }catch(Exception e){
             JSFUtil.adicionaMensagemFalha(e.getMessage());
        }
        
    }

     private void finalizaOperacao() {
        JSFUtil.adicionaMensagemSucesso();
        registroCaixa = new RegistroCaixa();
        carregaListagem();
    }
     
      private void carregaRegistroSelecionado() {
         registroCaixa = (RegistroCaixa) listaDespesas.getRowData();
    }

    /**
     * @return the total
     */
    public TotalDTO getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(TotalDTO total) {
        this.total = total;
    }
}
